//package org.convallaria.system.biz.controller.other;
//
//import io.swagger.v3.oas.annotations.Operation;
//import io.swagger.v3.oas.annotations.Parameter;
//import io.swagger.v3.oas.annotations.tags.Tag;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.convallaria.system.biz.service.RiskDetectionService;
//import org.convallaria.system.biz.service.SecurityMonitoringService;
//import org.springframework.web.bind.annotation.*;
//
//import java.time.LocalDateTime;
//import java.util.List;
//import java.util.Map;
//
///**
// * 安全监控控制器
// * 提供安全事件监控和风险检测的REST API
// *
// * @author convallaria
// * @since 1.0.0
// */
//@Slf4j
//@RestController
//@RequestMapping("/security/monitoring")
//@RequiredArgsConstructor
//@Tag(name = "安全监控", description = "安全事件监控和风险检测API")
//public class SecurityMonitoringController {
//
//    private final SecurityMonitoringService securityMonitoringService;
//    private final RiskDetectionService riskDetectionService;
//
//    /**
//     * 获取实时安全统计
//     */
//    @GetMapping("/stats/realtime")
//    @Operation(summary = "获取实时安全统计", description = "获取指定时间范围内的实时安全事件统计")
//    public Map<String, Object> getRealTimeStats(
//            @Parameter(description = "统计时间范围（分钟）", example = "60")
//            @RequestParam(defaultValue = "60") int minutes) {
//        log.info("获取实时安全统计: minutes={}", minutes);
//        return securityMonitoringService.getRealTimeSecurityStats(minutes);
//    }
//
//    /**
//     * 获取高风险事件列表
//     */
//    @GetMapping("/events/high-risk")
//    @Operation(summary = "获取高风险事件列表", description = "获取最近的高风险安全事件")
//    public List<Map<String, Object>> getHighRiskEvents(
//            @Parameter(description = "限制数量", example = "10")
//            @RequestParam(defaultValue = "10") int limit) {
//        log.info("获取高风险事件列表: limit={}", limit);
//        return securityMonitoringService.getHighRiskEvents(limit);
//    }
//
//    /**
//     * 获取系统安全概览
//     */
//    @GetMapping("/overview")
//    @Operation(summary = "获取系统安全概览", description = "获取系统整体安全状况概览")
//    public Map<String, Object> getSystemSecurityOverview() {
//        log.info("获取系统安全概览");
//        return securityMonitoringService.getSystemSecurityOverview();
//    }
//
//    /**
//     * 获取异常登录统计
//     */
//    @GetMapping("/stats/abnormal-login")
//    @Operation(summary = "获取异常登录统计", description = "获取指定时间范围内的异常登录统计")
//    public Map<String, Object> getAbnormalLoginStats(
//            @Parameter(description = "统计时间范围（小时）", example = "24")
//            @RequestParam(defaultValue = "24") int hours) {
//        log.info("获取异常登录统计: hours={}", hours);
//        return securityMonitoringService.getAbnormalLoginStats(hours);
//    }
//
//    /**
//     * 检查IP是否在黑名单中
//     */
//    @GetMapping("/blacklist/ip/{ip}")
//    @Operation(summary = "检查IP黑名单状态", description = "检查指定IP是否在黑名单中")
//    public Map<String, Object> checkIpBlacklist(
//            @Parameter(description = "IP地址", example = "192.168.1.100")
//            @PathVariable String ip) {
//        log.info("检查IP黑名单状态: ip={}", ip);
//        boolean isBlacklisted = securityMonitoringService.isIpBlacklisted(ip);
//        return Map.of("ip", ip, "isBlacklisted", isBlacklisted);
//    }
//
//    /**
//     * 添加IP到黑名单
//     */
//    @PostMapping("/blacklist/ip")
//    @Operation(summary = "添加IP到黑名单", description = "将指定IP添加到黑名单")
//    public Map<String, Object> addIpToBlacklist(
//            @Parameter(description = "IP地址", example = "192.168.1.100")
//            @RequestParam String ip,
//            @Parameter(description = "原因", example = "恶意攻击")
//            @RequestParam String reason,
//            @Parameter(description = "持续时间（小时）", example = "24")
//            @RequestParam(defaultValue = "24") int duration) {
//        log.info("添加IP到黑名单: ip={}, reason={}, duration={}", ip, reason, duration);
//        securityMonitoringService.addIpToBlacklist(ip, reason, duration);
//        return Map.of("success", true, "message", "IP已添加到黑名单");
//    }
//
//    /**
//     * 从黑名单移除IP
//     */
//    @DeleteMapping("/blacklist/ip/{ip}")
//    @Operation(summary = "从黑名单移除IP", description = "从黑名单中移除指定IP")
//    public Map<String, Object> removeIpFromBlacklist(
//            @Parameter(description = "IP地址", example = "192.168.1.100")
//            @PathVariable String ip) {
//        log.info("从黑名单移除IP: ip={}", ip);
//        securityMonitoringService.removeIpFromBlacklist(ip);
//        return Map.of("success", true, "message", "IP已从黑名单移除");
//    }
//
//    /**
//     * 获取安全告警配置
//     */
//    @GetMapping("/config/alert")
//    @Operation(summary = "获取安全告警配置", description = "获取当前的安全告警配置")
//    public Map<String, Object> getSecurityAlertConfig() {
//        log.info("获取安全告警配置");
//        return securityMonitoringService.getSecurityAlertConfig();
//    }
//
//    /**
//     * 更新安全告警配置
//     */
//    @PutMapping("/config/alert")
//    @Operation(summary = "更新安全告警配置", description = "更新安全告警配置")
//    public Map<String, Object> updateSecurityAlertConfig(@RequestBody Map<String, Object> config) {
//        log.info("更新安全告警配置: {}", config);
//        securityMonitoringService.updateSecurityAlertConfig(config);
//        return Map.of("success", true, "message", "安全告警配置已更新");
//    }
//
//    /**
//     * 获取用户安全评分
//     */
//    @GetMapping("/user/{userId}/security-score")
//    @Operation(summary = "获取用户安全评分", description = "获取指定用户的安全评分")
//    public Map<String, Object> getUserSecurityScore(
//            @Parameter(description = "用户ID", example = "1")
//            @PathVariable Long userId) {
//        log.info("获取用户安全评分: userId={}", userId);
//        int score = securityMonitoringService.getUserSecurityScore(userId);
//        return Map.of("userId", userId, "securityScore", score);
//    }
//
//    /**
//     * 分析用户风险
//     */
//    @GetMapping("/user/{userId}/risk-analysis")
//    @Operation(summary = "分析用户风险", description = "分析指定用户的风险状况")
//    public Map<String, Object> analyzeUserRisk(
//            @Parameter(description = "用户ID", example = "1")
//            @PathVariable Long userId) {
//        log.info("分析用户风险: userId={}", userId);
//        return riskDetectionService.analyzeUserRisk(userId);
//    }
//
//    /**
//     * 获取高风险用户列表
//     */
//    @GetMapping("/users/high-risk")
//    @Operation(summary = "获取高风险用户列表", description = "获取高风险用户列表")
//    public List<Map<String, Object>> getHighRiskUsers(
//            @Parameter(description = "限制数量", example = "10")
//            @RequestParam(defaultValue = "10") int limit) {
//        log.info("获取高风险用户列表: limit={}", limit);
//        return riskDetectionService.getHighRiskUsers(limit);
//    }
//
//    /**
//     * 获取用户行为模式
//     */
//    @GetMapping("/user/{userId}/behavior-pattern")
//    @Operation(summary = "获取用户行为模式", description = "获取指定用户的行为模式分析")
//    public Map<String, Object> getUserBehaviorPattern(
//            @Parameter(description = "用户ID", example = "1")
//            @PathVariable Long userId) {
//        log.info("获取用户行为模式: userId={}", userId);
//        return riskDetectionService.getUserBehaviorPattern(userId);
//    }
//
//    /**
//     * 检测异常登录
//     */
//    @PostMapping("/detect/abnormal-login")
//    @Operation(summary = "检测异常登录", description = "检测用户登录行为是否异常")
//    public Map<String, Object> detectAbnormalLogin(
//            @Parameter(description = "用户ID", example = "1")
//            @RequestParam Long userId,
//            @Parameter(description = "IP地址", example = "192.168.1.100")
//            @RequestParam String ip,
//            @Parameter(description = "用户代理", example = "Mozilla/5.0...")
//            @RequestParam String userAgent) {
//        log.info("检测异常登录: userId={}, ip={}", userId, ip);
//        return riskDetectionService.detectAbnormalLogin(userId, ip, userAgent, LocalDateTime.now());
//    }
//
//    /**
//     * 检测异常操作
//     */
//    @PostMapping("/detect/abnormal-operation")
//    @Operation(summary = "检测异常操作", description = "检测用户操作行为是否异常")
//    public Map<String, Object> detectAbnormalOperation(
//            @Parameter(description = "用户ID", example = "1")
//            @RequestParam Long userId,
//            @Parameter(description = "操作类型", example = "DELETE")
//            @RequestParam String operation,
//            @Parameter(description = "操作资源", example = "user_data")
//            @RequestParam String resource) {
//        log.info("检测异常操作: userId={}, operation={}, resource={}", userId, operation, resource);
//        return riskDetectionService.detectAbnormalOperation(userId, operation, resource, LocalDateTime.now());
//    }
//
//    /**
//     * 检测批量操作风险
//     */
//    @PostMapping("/detect/batch-operation-risk")
//    @Operation(summary = "检测批量操作风险", description = "检测用户批量操作的风险")
//    public Map<String, Object> detectBatchOperationRisk(
//            @Parameter(description = "用户ID", example = "1")
//            @RequestParam Long userId,
//            @Parameter(description = "操作次数", example = "100")
//            @RequestParam int operationCount,
//            @Parameter(description = "时间窗口（分钟）", example = "60")
//            @RequestParam int timeWindow) {
//        log.info("检测批量操作风险: userId={}, operationCount={}, timeWindow={}", userId, operationCount, timeWindow);
//        return riskDetectionService.detectBatchOperationRisk(userId, operationCount, timeWindow);
//    }
//
//    /**
//     * 检测权限滥用风险
//     */
//    @PostMapping("/detect/permission-abuse-risk")
//    @Operation(summary = "检测权限滥用风险", description = "检测用户权限使用是否存在滥用风险")
//    public Map<String, Object> detectPermissionAbuseRisk(
//            @Parameter(description = "用户ID", example = "1")
//            @RequestParam Long userId,
//            @Parameter(description = "权限列表", example = "[\"READ\", \"WRITE\", \"DELETE\"]")
//            @RequestBody List<String> permissions) {
//        log.info("检测权限滥用风险: userId={}, permissions={}", userId, permissions);
//        return riskDetectionService.detectPermissionAbuseRisk(userId, permissions);
//    }
//
//    /**
//     * 获取风险检测配置
//     */
//    @GetMapping("/config/risk-detection")
//    @Operation(summary = "获取风险检测配置", description = "获取当前的风险检测配置")
//    public Map<String, Object> getRiskDetectionConfig() {
//        log.info("获取风险检测配置");
//        return riskDetectionService.getRiskDetectionConfig();
//    }
//
//    /**
//     * 更新风险检测配置
//     */
//    @PutMapping("/config/risk-detection")
//    @Operation(summary = "更新风险检测配置", description = "更新风险检测配置")
//    public Map<String, Object> updateRiskDetectionConfig(@RequestBody Map<String, Object> config) {
//        log.info("更新风险检测配置: {}", config);
//        riskDetectionService.updateRiskDetectionConfig(config);
//        return Map.of("success", true, "message", "风险检测配置已更新");
//    }
//
//    /**
//     * 生成用户风险报告
//     */
//    @GetMapping("/user/{userId}/risk-report")
//    @Operation(summary = "生成用户风险报告", description = "生成指定用户的风险报告")
//    public Map<String, Object> generateRiskReport(
//            @Parameter(description = "用户ID", example = "1")
//            @PathVariable Long userId,
//            @Parameter(description = "开始时间", example = "2024-01-01T00:00:00")
//            @RequestParam String startTime,
//            @Parameter(description = "结束时间", example = "2024-01-31T23:59:59")
//            @RequestParam String endTime) {
//        log.info("生成用户风险报告: userId={}, startTime={}, endTime={}", userId, startTime, endTime);
//        LocalDateTime start = LocalDateTime.parse(startTime);
//        LocalDateTime end = LocalDateTime.parse(endTime);
//        return riskDetectionService.generateRiskReport(userId, start, end);
//    }
//
//    /**
//     * 获取系统风险概览
//     */
//    @GetMapping("/risk-overview")
//    @Operation(summary = "获取系统风险概览", description = "获取系统整体风险状况概览")
//    public Map<String, Object> getSystemRiskOverview() {
//        log.info("获取系统风险概览");
//        return riskDetectionService.getSystemRiskOverview();
//    }
//
//    /**
//     * 发送安全告警
//     */
//    @PostMapping("/alert/send")
//    @Operation(summary = "发送安全告警", description = "发送安全告警通知")
//    public Map<String, Object> sendSecurityAlert(
//            @Parameter(description = "告警类型", example = "HIGH_RISK_EVENT")
//            @RequestParam String alertType,
//            @Parameter(description = "告警消息", example = "检测到高风险事件")
//            @RequestParam String message,
//            @Parameter(description = "接收者列表", example = "[\"admin@convallaria.com\"]")
//            @RequestBody List<String> recipients) {
//        log.info("发送安全告警: alertType={}, message={}, recipients={}", alertType, message, recipients);
//        securityMonitoringService.sendSecurityAlert(alertType, message, recipients);
//        return Map.of("success", true, "message", "安全告警已发送");
//    }
//}
